<?php

class CarritoController extends Zend_Controller_Action
{

    public function productoExiste($datosSesionCarritoProds, $idProd)
    {
		foreach($datosSesionCarritoProds as $key => $val){
			if($val['id_producto'] == $idProd){
				return true;
			}
		}
		
		return false;
    }

    public function productoAgregar(&$datosSesionCarritoProds, $idProd, $cantAdicional = 1)
    {
		foreach($datosSesionCarritoProds as $key => $val){
			if($val['id_producto'] == $idProd){
				$datosSesionCarritoProds[$key]['cant']+=$cantAdicional;
			}
		}
		
    }
	
	public function recalcularTotal()
    {
		$auth = Zend_Auth::getInstance();

		//Leo los datos de sesion
		$datosSesion = $auth->getStorage()->read();

		$total = 0;
		foreach($datosSesion['carrito']['productos'] as $key => $val){
			$total += $val['precio'] * $val['cant'];
		}
		
		$datosSesion['carrito']['total'] = $total;
		$auth->getStorage()->write($datosSesion);
    }

    public function productoBorrar(&$datosSesionCarritoProds, $idProd)
    {
		foreach($datosSesionCarritoProds as $key => $val){
			
			if($val['id_producto'] == $idProd){
				unset($datosSesionCarritoProds[$key]);
			}
		}
		
    }

    public function productosContar(&$datosSesionCarrito)
    {
		$total = 0;
		foreach($datosSesionCarrito['productos'] as $key => $val){
			$total += $val['cant'];
		}
		$datosSesionCarrito['cantProd']=$total;
		return $total;
    }
	
	public function carritoVacio(){
		$auth = Zend_Auth::getInstance();

		//Leo los datos de sesion
		$datosSesion = $auth->getStorage()->read();
		
		if(count($datosSesion['carrito']['productos'])>0) {
			//Tiene algo
			return false;
		}else{
			return true; //esta vacio
		}
	}
	
	public function vaciarCarrito() {
		$auth = Zend_Auth::getInstance();

		//Leo los datos de sesion
		$datosSesion = $auth->getStorage()->read();
		//Limpiamos el carrito
		$datosSesion['carrito'] = array(
			'total' => 0,
			'cantProd' => 0,
			'productos' => array()
		);
		$auth->getStorage()->write($datosSesion);
	}
	
	/**
	* @method persistirPedido
	* @desc Persiste los datos de session del cliente relacionados con productos
	*/
	public function persistirPedido(){
		 // action body
		$auth = Zend_Auth::getInstance();

		//Leo los datos de sesion
		$datosSesion = $auth->getStorage()->read();
		$tablaPedidos = new Application_Model_DbTable_Pedidos();
		$tablaPedidosDetalle = new Application_Model_DbTable_PedidosDetalle();
		
		// echo "<pre>";
		// print_r($datosSesion);
		// echo "</pre>";die();
		
		$datosPedido = array(
			"id_cliente" => $datosSesion['idCliente'],
			// "nro_factura" => $,
			"fecha_compra" => date("Y-m-d h:i:s"),
			// "monto_total" => $,
			"id_estado" => '1'
		);
		$idPedido = $tablaPedidos->insert($datosPedido);
		$montoTotal = 0;
		foreach($datosSesion['carrito']['productos'] as $llave => $producto) {
			$datos = array(
				"id_pedido" => $idPedido,
				"id_producto" => $producto['id_producto'],
				"precio_venta" => $producto['precio'],
				"cantidad" => $producto['cant']
			);
			$tablaPedidosDetalle->insert($datos);
			$montoTotal  += $producto['precio']*$producto['cant'];
		}
		$datosTot = array(
			'monto_total' => $montoTotal,
			'id_estado' => 1 // 1- Pendiente
		);
		$where = array('id_pedido = ?' => $idPedido);
		$tablaPedidos->update($datosTot,$where);
		
		// return $idPedido;
	}

    public function init()
    {
        /* Initialize action controller here */
		$auth = Zend_Auth::getInstance();
		if ($auth->hasIdentity()) {
			$userInfo = $auth->getStorage()->read();
			if($userInfo['isAdmin']){
				$this->_helper->layout->disableLayout();
				$this->getRequest()->setParam('format', 'json');
				$response = array('estado'=>'DESCONECTADO');
				// $this->view->json = json_encode($response);
				echo json_encode($response);
				// $this->getResponse()->sendResponse();
				die();
			}
		}else{
			$this->_helper->layout->disableLayout();
			$this->getRequest()->setParam('format', 'json');
			$response = array('estado'=>'DESCONECTADO');
			// $this->view->json = json_encode($response);
			echo json_encode($response);
			die();
		}
		$this->_helper->layout->disableLayout();
		$this->getRequest()->setParam('format', 'json');
    }

    public function indexAction()
    {
        // action body
		$this->_helper->redirector('listar', 'carrito');
    }

    public function agregarAction()
    {
		$response = array(
			'estado' =>'OK',
			'datos'  => array(
				'cantTotal' => 0
			)
		);
		$request = $this->getRequest();
		$auth = Zend_Auth::getInstance();

		//Leo los datos de sesion
		$datosSesion = $auth->getStorage()->read();
		$tablaProductos = new Application_Model_DbTable_Productos();
		$resBusqueda = $tablaProductos->getProductosFromId($request->getParam('id'));
		//guardo la cantidad pedida
		$resBusqueda[0]['cant'] = 1;
		// if($request->getParam('cantidad')){
			// echo $request->getParam('cantidad');die();
		// }
		// print_r($datosSesion['carrito']['productos']);die();
		
		if($this->productoExiste($datosSesion['carrito']['productos'],$request->getParam('id'))){
			if($request->getParam('cantidad')){
				$this->productoAgregar($datosSesion['carrito']['productos'], $request->getParam('id'), $request->getParam('cantidad'));
			} else {
				$this->productoAgregar($datosSesion['carrito']['productos'], $request->getParam('id'));
			}
		}else{
			if($request->getParam('cantidad')){
				$resBusqueda[0]['cant'] = $request->getParam('cantidad');
			}
			array_push($datosSesion['carrito']['productos'],$resBusqueda[0]);
		}
		
		
		
		// Agrego la cantidad total de productos a la respuesta
		$response['datos']['cantTotal'] = $this->productosContar($datosSesion['carrito']);
		
		//Guardo los datos de sesion
		$auth->getStorage()->write($datosSesion);
		
		//recalculo el total
		$this->recalcularTotal();
		
		//Muestro respuesta de la operacion
		$this->view->json = json_encode($response);
    }

    public function listarAction()
    {
        // action body
		$auth = Zend_Auth::getInstance();
		$datosSesion = $auth->getStorage()->read();

		$this->view->json = json_encode($datosSesion['carrito']);
    }

    public function editarAction()
    {
        // action body
    }

    public function borrarAction()
    {
        // action body
		$response = array(
			'estado' =>'OK',
			'datos'  => array(
				'cantTotal' => 0
			)
		);
		$request = $this->getRequest();
		$auth = Zend_Auth::getInstance();

		//Leo los datos de sesion
		$datosSesion = $auth->getStorage()->read();
		
		if($this->productoExiste($datosSesion['carrito']['productos'],$request->getParam('id'))){
			$this->productoBorrar($datosSesion['carrito']['productos'], $request->getParam('id'));
			// Agrego la cantidad total de productos a la respuesta
			$this->productosContar($datosSesion['carrito']);
			
			//Guardo los datos de sesion
			$auth->getStorage()->write($datosSesion);
		}
		
		
		
		// Agrego la cantidad total de productos a la respuesta
		$response['datos']['cantTotal'] = $datosSesion['carrito']['cantProd'];
		
		//recalculo el total
		$this->recalcularTotal();
		//Muestro respuesta de la operacion
		$this->view->json = json_encode($response);
    }

    public function vaciarAction()
    {
        // action body
		$response = array(
			'estado' =>'OK'
		);
		$auth = Zend_Auth::getInstance();

		$this->vaciarCarrito();
		
		//Muestro respuesta de la operacion
		$this->view->json = json_encode($response);
    }

    public function confirmarAction()
    {
        // action body
		$response = array(
			'estado' =>'OK'
		);
		if(!$this->carritoVacio()){
			//Si no esta vacio, persistir pedido
			$this->persistirPedido();
			$this->vaciarCarrito();
		}else{
			//Esta vacio
			$response = array(
				'estado' =>'FAIL',
				'desc' => 'CarritoVacio'
			);
		}
		//Muestro respuesta de la operacion
		$this->view->json = json_encode($response);
    }


}













